# backend/api/auth.py
from flask import Blueprint, request, jsonify
# 移除JWT相关的导入
from backend.extensions import db, bcrypt
from backend.models import User
import re
import os
import logging

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

auth_bp = Blueprint('auth', __name__)

# 从环境变量获取管理员邮箱列表，如果没有则使用默认值
ADMIN_EMAILS = os.environ.get('ADMIN_EMAILS', 'admin@kumebiotech.com,manager@kumebiotech.com').split(',')

def validate_email(email):
    pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    return re.match(pattern, email) is not None

@auth_bp.route('/register', methods=['POST'])
def register():
    try:
        data = request.get_json()
        
        # 验证输入
        if not data.get('username') or not data.get('email') or not data.get('password'):
            return jsonify({'message': '用户名、邮箱和密码都是必需的'}), 400
        
        if not validate_email(data['email']):
            return jsonify({'message': '邮箱格式不正确'}), 400
        
        if len(data['password']) < 6:
            return jsonify({'message': '密码长度至少为6位'}), 400
        
        # 检查用户名和邮箱是否已存在
        if User.query.filter_by(username=data['username']).first():
            return jsonify({'message': '用户名已存在'}), 409
        
        if User.query.filter_by(email=data['email']).first():
            return jsonify({'message': '邮箱已被注册'}), 409
        
        # 如果是大健康平台，不允许用户自行注册
        if data.get('platform') == 'health':
            return jsonify({'message': '大健康平台用户只能由管理员添加'}), 403
        
        # 确定用户角色
        role = 'admin' if data['email'] in ADMIN_EMAILS else 'user'
        
        # 创建新用户
        user = User(
            username=data['username'],
            email=data['email'],
            role=role,
            platform=data.get('platform', 'biocloud')
        )
        user.set_password(data['password'])
        
        db.session.add(user)
        db.session.commit()
        
        # 返回用户信息，模拟JWT令牌
        return jsonify({
            'message': '用户注册成功',
            'user': user.to_dict(),
            'access_token': 'no_token_needed'
        }), 201
    except Exception as e:
        logger.error(f"注册错误: {str(e)}")
        db.session.rollback()
        return jsonify({'message': '注册失败，请稍后重试'}), 500

@auth_bp.route('/login', methods=['POST'])
def login():
    try:
        data = request.get_json()
        
        # 支持邮箱或用户名登录
        identifier = data.get('identifier')
        password = data.get('password')
        
        if not identifier or not password:
            return jsonify({'message': '请输入用户名/邮箱和密码'}), 400
        
        # 查找用户
        user = User.query.filter(
            (User.username == identifier) | (User.email == identifier)
        ).first()
        
        if not user or not user.check_password(password):
            return jsonify({'message': '用户名/邮箱或密码错误'}), 401
        
        # 返回用户信息，模拟JWT令牌
        return jsonify({
            'access_token': 'no_token_needed',
            'user': user.to_dict()
        }), 200
    except Exception as e:
        logger.error(f"登录错误: {str(e)}")
        return jsonify({'message': '登录失败，请稍后重试'}), 500

# 新增管理员创建用户接口
@auth_bp.route('/admin/create_user', methods=['POST'])
def admin_create_user():
    # 这里需要实现一个简单的管理员检查方法
    # 暂时先允许所有请求通过，后续可以添加更复杂的权限检查
    try:
        data = request.get_json()
        
        # 验证输入
        if not data.get('username') or not data.get('email') or not data.get('password'):
            return jsonify({'message': '用户名、邮箱和密码都是必需的'}), 400
        
        if not validate_email(data['email']):
            return jsonify({'message': '邮箱格式不正确'}), 400
        
        if len(data['password']) < 6:
            return jsonify({'message': '密码长度至少为6位'}), 400
        
        # 检查用户名和邮箱是否已存在
        if User.query.filter_by(username=data['username']).first():
            return jsonify({'message': '用户名已存在'}), 409
        
        if User.query.filter_by(email=data['email']).first():
            return jsonify({'message': '邮箱已被注册'}), 409
        
        # 确定用户角色（管理员可以创建管理员或其他用户）
        role = data.get('role', 'user')
        if role not in ['user', 'admin']:
            role = 'user'
        
        # 创建新用户
        user = User(
            username=data['username'],
            email=data['email'],
            role=role,
            platform=data.get('platform', 'health')  # 默认为大健康平台
        )
        user.set_password(data['password'])
        
        db.session.add(user)
        db.session.commit()
        
        return jsonify({
            'message': '用户创建成功',
            'user_id': user.user_id,
            'user': user.to_dict()
        }), 201
    except Exception as e:
        logger.error(f"管理员创建用户错误: {str(e)}")
        db.session.rollback()
        return jsonify({'message': '创建用户失败，请稍后重试'}), 500